JavaScriptのDate型でInvalid Dateを判別する
Date型のコンストラクタは以下のような種類がある
new Date()
new Date(value)
new Date(dateString)
new Date(year, monthIndex...)
Date() constructor - JavaScript | MDN
value, dateString, year, monthIndex...が何を取るかは、上記のサイトに書いてある
かなり複雑…
なんとなく渡しても、なんとなく返ってくるんだけど(返ってきた値を確認してmonthIndexを一つずらしたり)、不意に日付じゃない値を引数に渡すとInvalid Dateで返ってくる
そのまま処理が進んでしまう...
Invalid Dateって何…
Google ChromeのDevToolsを使用
code:js
var validDate = new Date("2020-09-09")
var invalidDate = new Date("適当な文字列を渡す")
validDate
Wed Sep 09 2020 09:00:00 GMT+0900 (日本標準時)
invalidDate
Invalid Date
不正な日付でDateインスタンスを生成したのを判別して処理を分けたい
Detecting an "invalid date" Date instance in JavaScript - Stack Overflow
判断は以下の二段階でする?
Date型かそうでないか
Date型の場合、不正なDateかそうでないか
Date型かそうでないか
instanceofで判断
validDateもinvalidDateもDate型ではあるからどちらもtrueになる
code:js
validDate instanceof Date
true
invalidDate instanceof Date
true
Date型の場合、不正なDateかそうでないか
isNaNで判断
code:js
validDate.getTime()
1599609600000
invalidDate.getTime()
NaN
isNaN(validDate.getTime())
false
isNaN(invalidDate.getTime())
true // これが不正な日付
関連
JavaScriptにおけるNaNとの比較